'''
Created on 19/03/2012

@author: Federico
'''
from google.appengine.ext import db 
#from google.appengine.ext.db import DateProperty
#from Units.database.uDeadLine import DeadLine
import datetime


class Tareas(db.Model):
    _Usuario = db.UserProperty()
    _Asunto = db.StringProperty()
    _FechaCreacion = db.DateTimeProperty(auto_now_add=True)
    _Vencimiento = db.DateProperty(required = False) 
    _Categoria =  db.StringProperty(choices=set(["Trabajo", "Personal", "Estudio","Bandeja de Entrada","Enviadas"]))
    _Completada = db.BooleanProperty(default = False) #false= pendiente, true = completada
    _Pospuesta = db.IntegerProperty(default = 0)
    _Prioridad = db.IntegerProperty(choices = [0, 1, 2, 3])
    _TiempoEstimado = db.TimeProperty(required=False)
    _Notas = db.TextProperty(required=False)
    _UsuariosCompartidos = db.StringListProperty()
    _Compartida = db.BooleanProperty(default = False)

        
           
    def getUser(self):
        return self._Usuario
    
    def setUser(self, aUsuario):
        self._Usuario = aUsuario
        self.put()
    
    def setAsunto(self,aAsunto):
        self._Asunto = aAsunto
        self.put()
    
    def getAsunto(self):
        return self._Asunto
    
    def getFechaCreacion(self):
        return self._FechaCreacion
    
    def setFechaCreacion(self,aDateTime):
        self._FechaCreacion = aDateTime
        self.put()
        
    def getVencimiento(self): 
        if self._Vencimiento == None:
            return "No especificado"
        else:
            return self._Vencimiento

    def setVencimiento(self,aDateTime):
            self._Vencimiento = datetime.datetime.strptime(aDateTime, '%d/%m/%Y').date()
            self.put()

    def estaVencida(self):
        if not (self.getVencimiento()=="No especificado") and (self.getVencimiento()<datetime.datetime.today().date()):
            return True
        else:
            return False                      

    def getCategoria(self):
        return self._Categoria
    
    def setCategoria(self, aCategoria):
        L1= ["Trabajo", "Personal", "Estudio","Bandeja de Entrada","Enviadas"]
        if aCategoria in L1:
            self._Categoria = aCategoria
            self.put()        
    
 
    def getEstado(self):
        if (self._Completada is False):
            return "Pendiente"
        else:
            return "Completada"
    
    def CambiarEstado(self):
        self._Completada = not self._Completada
        self.put()

    def Posponer(self):
        #Suma un dia a la fecha de vencimiento
        datestr = datetime.date.strftime(self.getVencimiento(),'%Y-%m-%d')
        year,month,day = datestr.split('-')
        date = datetime.date(int(year),int(month),int(day))
        nuevafecha = date + datetime.timedelta(days=1)
        
        nuevafechastr = datetime.date.strftime(nuevafecha,'%d/%m/%Y')
        self.setVencimiento(nuevafechastr)
        self._Pospuesta = self._Pospuesta + 1
        self.put()
        
    def getPospuesta(self):
        return self._Pospuesta
    
    def setPrioridad(self, aPrioridad):
        #if aPrioridad in ["0", "1", "2", "3"]: Producia error en la validacion
        
        #como es que python no tiene estructura case??? !!!
        def a0():
            self._Prioridad=0
            
        def a1():
            self._Prioridad=1
        
        def a2():
            self._Prioridad=2
        
        def a3():
            self._Prioridad=3
        
        options = {'0':a0,
                    '1':a1,
                     '2':a2,
                      '3':a3}
        
        options.get(aPrioridad, -1)()   
        self.put()
    
    def getPrioridad(self):
        return self._Prioridad

    def setTiempoEstimado(self, aTime):
        self._TiempoEstimado = datetime.datetime.strptime(aTime, '%H:%M').time()
        self.put()

    def getDuracion(self):
        if self._TiempoEstimado ==None:
            return "No especificado"
        else:
            return self._TiempoEstimado
    
    def getNotas(self):
        return self._Notas
    
    def setNotas(self, aText):
        self._Notas = aText
        self.put()
  
    def Compartir(self, aUserEmail):
        self._UsuariosCompartidos = self._UsuariosCompartidos + [aUserEmail]
        self._Compartida = True
        self.put()
    
    def EliminarTarea(self):
        db.delete(self)
    
    def ImprimirTarea(self):
        return [{'getAsunto':self.getAsunto(), 'getEstado': self.getEstado(),'getCategoria': self.getCategoria() ,'getPrioridad': self.getPrioridad(),'getVencimiento': self.getVencimiento(),'getDuracion': self.getDuracion(), 'getNotas': self.getNotas() }]
    
            
    
        
                       

        
